Dependency Injection (DI) হলো একটি ডিজাইন প্যাটার্ন, যা অ্যাপ্লিকেশনের বিভিন্ন ক্লাস এবং অবজেক্টের মধ্যে ডিপেনডেন্সিগুলো পরিচালনা করতে ব্যবহৃত হয়। এটি একটি ক্লাসের নির্ভরশীলতা (Dependency) সরাসরি সেই ক্লাসের মধ্যে তৈরি না করে বাইরে থেকে সরবরাহ করার পদ্ধতি। DI এর মাধ্যমে কোড আরও মডুলার, পুনর্ব্যবহারযোগ্য এবং টেস্টযোগ্য হয়।
Dependency হলো একটি ক্লাসের এমন কোনো অবজেক্ট বা সার্ভিস, যা সেই ক্লাসের কার্য সম্পাদনে প্রয়োজন হয়। উদাহরণস্বরূপ, একটি ক্লাস যদি ডেটা রিটার্ন করার জন্য অন্য একটি ক্লাসের ওপর নির্ভরশীল হয়, তবে সেই ক্লাসটি তার Dependency।
public class DataProcessor
{
private DatabaseService _dbService;
public DataProcessor()
{
_dbService = new DatabaseService(); // Dependency
}
}
উপরের কোডে DataProcessor
ক্লাস সরাসরি DatabaseService
তৈরি করছে, যা সরাসরি ডিপেনডেন্সি তৈরি করার উদাহরণ।
Injection হলো ডিপেনডেন্সি সরাসরি ক্লাসের মধ্যে তৈরি না করে, এটি বাইরে থেকে সরবরাহ করার প্রক্রিয়া।
public class DataProcessor
{
private readonly DatabaseService _dbService;
public DataProcessor(DatabaseService dbService) // Dependency Injected
{
_dbService = dbService;
}
}
উপরের উদাহরণে, DatabaseService
অবজেক্টটি কনস্ট্রাক্টরের মাধ্যমে সরবরাহ করা হয়েছে। এটি DI এর একটি উদাহরণ।
DI মূলত Inversion of Control (IoC) এর বাস্তবায়ন। IoC মানে ক্লাস নিজে তার নির্ভরশীলতা নিয়ন্ত্রণ না করে তা বাইরে থেকে সরবরাহ করা হয়। IoC Container বা Service Container এই দায়িত্ব পালন করে।
Dependency সরবরাহ করার জন্য কনস্ট্রাক্টর ব্যবহার করা হয়। এটি সবচেয়ে সাধারণ এবং জনপ্রিয় পদ্ধতি।
public class DataProcessor
{
private readonly IDataService _dataService;
public DataProcessor(IDataService dataService)
{
_dataService = dataService;
}
}
Dependency সরবরাহ করার জন্য একটি Public Property ব্যবহার করা হয়।
public class DataProcessor
{
public IDataService DataService { get; set; }
}
Dependency সরবরাহ করার জন্য একটি মেথড ব্যবহার করা হয়।
public class DataProcessor
{
public void ProcessData(IDataService dataService)
{
dataService.GetData();
}
}
public class DataProcessor
{
private DatabaseService _dbService = new DatabaseService();
public void ProcessData()
{
_dbService.SaveData();
}
}
এখানে DataProcessor
সরাসরি DatabaseService
তৈরি করছে, যা Tightly Coupled ডিজাইন।
public class DataProcessor
{
private readonly IDatabaseService _dbService;
public DataProcessor(IDatabaseService dbService)
{
_dbService = dbService;
}
public void ProcessData()
{
_dbService.SaveData();
}
}
এখানে IDatabaseService
ইন্টারফেস ব্যবহার করে Dependency Inject করা হয়েছে, যা Loosely Coupled ডিজাইন।
Dependency Injection একটি শক্তিশালী ডিজাইন প্যাটার্ন, যা ASP.NET Core এর কোডিং স্ট্যান্ডার্ড এবং আর্কিটেকচারে একটি গুরুত্বপূর্ণ ভূমিকা পালন করে। এটি অ্যাপ্লিকেশনকে মডুলার, স্কেলেবল এবং টেস্টযোগ্য করে তোলে।
common.read_more